package com.bupt.chapter.third.ants_climbing;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Solution {
	private static int[] pos = { 3, 7, 11, 17, 23 };
	private static int[] status = { -1, -1, -1, -1, -1 };
	private static int num = 0;
	public static void main(String[] args) {
		// for (int i = 0; i < args.length; i++) {
		// getTimes();
		// }
		getDir(0);
	}

	private static void getDir(int start) {
		int result = getTimes(status);
		System.out.println(num+++":"+Arrays.toString(status)+" result:"+result);
		if (start < 5) {
			for (int i = start; i < status.length; i++) {
				status[i] += 2;
//				System.out.println(Arrays.toString(status));
				getDir(i + 1);
				status[i] -= 2;
			}
		}
	}

	private static int getTimes(int[] nums) {
		List<Ant> ants = init(nums);
		return proc(ants);
	}

	private static int proc(List<Ant> ants) {
		int count = 0;
		while (!ants.isEmpty()) {
			for (int i = 0; i < ants.size(); i++) {
				ants.get(i).nextMove();
				if (ants.get(i).position == 27 || ants.get(i).position == 0) {
					ants.remove(i);
					i--;
				}

			}

			for (int i = 0; i < ants.size() - 1; i++) {
				if (ants.get(i).position == ants.get(i + 1).position) {
					ants.get(i).chgDir();
					ants.get(i + 1).chgDir();
				}
			}
			count++;
		}
		return count;
	}

	public static List<Ant> init(int[] dirs) {
		List<Ant> ants = new ArrayList<Ant>(5);
		for (int i = 0; i < dirs.length; i++) {
			ants.add(new Ant(pos[i], dirs[i]));
		}
		return ants;
	}
}
